#!/usr/bin/env bash
. "$GVM_ROOT/scripts/functions"

display_usage() {
	display_message "Usage: gvm cross [os] [arch]"
	display_message "  os   = linux/darwin/windows"
	display_message "  arch = amd64/386/arm"
}

display_list() {
	echo
	display_usage
	echo
	display_message "Installed platforms:"
	echo
	$LS_PATH -1 "$GOROOT/pkg" | $GREP_PATH windows_ | sed 's/^/   /g'
	$LS_PATH -1 "$GOROOT/pkg" | $GREP_PATH darwin_ | sed 's/^/   /g'
	$LS_PATH -1 "$GOROOT/pkg" | $GREP_PATH linux_ | sed 's/^/   /g'
	echo
	exit 1
}

command -v go &> /dev/null || display_fatal "Only available in versions after Go 1"

[ -z "$1" ] && display_list

if [ ! -f "$GOROOT/pkg/tool/cross" ]; then
	display_message "Installing x86, x86-64, and ARM commands"
	set -e
	for arch in 8 6 5; do
		for cmd in a c g l; do
			go tool dist install -v cmd/$arch$cmd ||
				display_fatal "Couldn't compile tool: $arch$cmd"
		done
	done
	touch "$GOROOT/pkg/tool/cross"
fi

export GOOS=$1
shift
[ -z "$1" ] && display_usage && display_fatal "arch is not specified"
export GOARCH=$1

if [ ! -d "$GOROOT/pkg/${GOOS}_${GOARCH}" ]; then
	display_message "Installing $GOOS $GOARCH runtime library"
	if [ "$GOOS" = "windows" ]; then
		export CGO_ENABLED=0
	fi

	builtin cd "$GOROOT/src"
	if [ -d pkg/runtime ]; then
		runtime='pkg/runtime'
	else
		# Go 1.4 moved pkg/ up a level
		runtime='runtime'
	fi
	go tool dist install -v "$runtime" ||
		display_fatal "Couldn't compile runtime library for $GOOS $GOARCH"
	go install -v -a std ||
		display_fatal "Install runtime library for $GOOS $GOARCH"
else
	display_message "Runtime library already installed for $GOOS $GOARCH"
fi

